package com.uc3m.dsic.gestorZoo;

/**
 * Interfaz del gestorZoo con los métodos esenciales. Se emplea para separar
 * la referencia del gestor con la interfaz.
 *
 * @author Guillermo Solano Méndez
 */
public interface GestorZooInterface {

    /**
     * Actualización (consulta, inserción o borrado) de la base de datos.
     *
     * @param consulta Consulta de la base de datos, del estilo
     *              "INSERT INTO Sala VALUES"
     * @param param   Los distintos parametros pasados por array. Por ejemplo
     *             {"20", "200", "sala de los monos", "id_zoo"}. El método ya
     *             se encarga de insertarlo con el formato correcto
     *             ('20','200','sala de los monos','id_zoo').
     * @return     o bien la primera fila de la consulta o 0 si la consulta no
     *             devolvió nada.
     * @exception SQLException si se produce un error en la base de datos
     */
    public int actualiza(String consulta, String[] param)
            throws java.sql.SQLException;

    /**
     * Actualización (consulta, inserción o borrado) de la base de datos.
     *
     * @param consulta Consulta de la base de datos completa. Por ejemplo:
     *             "DELETE INTO Zoo WHERE id_zoo='id_zoo_buscado'.
     * @return     o bien la primera fila de la consulta o 0 si la consulta no
     *             devolvió nada.
     * @exception SQLException si se produce un error en la base de datos
     */
    public int actualiza(String consulta) throws java.sql.SQLException;

    /**
     * Interfaz ResultSet con toda la tabla solicitada
     *
     * @param  t Enum Tablas con la tabla deseada.
     * @exception SQLException si se produce un error en la base de datos
     */
    /* nota: el tratamiento es externo al método. Y como se realizó para las
     * practicas 1 y 2 */
    public java.sql.ResultSet getTabla(GestorZooAplicacion.Tablas t)
            throws java.sql.SQLException;

    /**
     * Interfaz ResultSet con toda la tabla solicitada
     *
     * @param  tabla con el nombre de tabla deseado
     * @return ResultSet con el set de la tabla
     * @exception SQLException si se produce un error en la base de datos,
     *                         o el nombre de la tabla es incorrecta
     */
    public java.sql.ResultSet getTabla(String tabla)
            throws java.sql.SQLException;

    /**
     * Realiza una consulta a la base de datos
     *
     * @param consulta completa pasada en un String
     * @return ResultSet con el set de la tabla
     * @exception SQLException si se produce un error en la base de datos,
     *                         o la consulta es incorrecta incorrecta
     */
    public java.sql.ResultSet ejecutarConsulta(String consulta)
            throws java.sql.SQLException;

    /**
     * Genera una estructura de datos con toda las filas contenidas en la
     * tabla especificada por parametro.
     * @param nombreTabla nombre de la tabla definido por el enumerador
     *         GestorZooAplicacion.Tablas
     * @return  La primera coleccion hace referencia a la fila de la tabla,
     *          la segunda a la columna actual.
     * @throws ZooException Si no el nombre introducido por parametro no
     *          coincide con el nombre de una tabla de la base de datos zoo.
     * @throws SQLException  Si se produce un error con la consulta SQL
     */
    /*NOTA: los nombres de las tablas vienen definidas en la constante
    GestorZooAplicacion.TABLAS_BD*/
    public java.util.Collection<java.util.Collection<String>>
            getEDTabla(GestorZooAplicacion.Tablas nombreTabla)
            throws ZooException, java.sql.SQLException;

    /**
     * Cierra la base de datos y almacena en disco los cambios. Este metodo
     * debe llamarse para actualizar cambios en la BD.
     */
    public void cerrarBD();
}
